#include<bits/stdc++.h>
using namespace std;
#define int long long
#define For(a,x,y) for(int a=x; a<=y; a++)
#define pb push_back
int n,m,a[1010][1010];
struct node{int x,y,val;};
vector<node> ans;
void paint(int x,int y){
if(x==0||x==n||y==0||y==m) return;
int val[]={a[x][y],a[x+1][y],a[x][y+1],a[x+1][y+1]};
sort(val,val+4);
if(val[3]==0) return;
bool flag=true;
For(i,0,2) if(val[i]!=0&&val[i]!=val[3]) flag=false;
if(!flag) return;
ans.pb((node){x,y,val[3]});
For(i,x,x+1) For(j,y,y+1) a[i][j]=0;
For(i,x-1,x+1) For(j,y-1,y+1) paint(i,j);
}
signed main(){
cin>>n>>m;
For(i,1,n) For(j,1,m) cin>>a[i][j];
For(i,1,n-1) For(j,1,m-1) paint(i,j);
reverse(ans.begin(),ans.end());
For(i,1,n) For(j,1,m) if(a[i][j]!=0){cout<<-1<<endl;return 0;}
cout<<ans.size()<<endl;
for(auto p:ans) printf("%lld %lld %lld\n",p.x,p.y,p.val);
}
214A - System of Equations | 287A - IQ Test |
1108A - Two distinct points | 1064A - Make a triangle |
1245C - Constanze's Machine | 1005A - Tanya and Stairways |
1663F - In Every Generation | 1108B - Divisors of Two Integers |
1175A - From Hero to Zero | 1141A - Game 23 |
1401B - Ternary Sequence | 598A - Tricky Sum |
519A - A and B and Chess | 725B - Food on the Plane |
154B - Colliders | 127B - Canvas Frames |
107B - Basketball Team | 245A - System Administrator |
698A - Vacations | 1216B - Shooting |
368B - Sereja and Suffixes | 1665C - Tree Infection |
1665D - GCD Guess | 29A - Spit Problem |
1097B - Petr and a Combination Lock | 92A - Chips |
1665B - Array Cloning Technique | 1665A - GCD vs LCM |
118D - Caesar's Legions | 1598A - Computer Game |